package com.asiainfo.iam.tool;

import org.springframework.stereotype.Component;


/**
 * 进度条绘制类，提供在控制台显示进度条的功能。
 * 包含两个核心方法：
 * - callProgressBar：计算当前进度百分比
 * - drawProgressBar：根据进度百分比绘制文本进度条
 */
@Component
public class ProgressBarDrawer {

    /**
     * 根据已完成步骤和总步骤计算进度百分比
     * @param totalSteps 总步骤数
     * @param nowSteps 当前已完成步骤数
     */
    public void callProgressBar(long totalSteps, long nowSteps) {
        // 计算进度百分比，使用浮点数运算保证精度
        long progress = (long)(100.0 * nowSteps / totalSteps);
        // 调用进度条绘制方法
        this.drawProgressBar(progress);
    }

    /**
     * 在控制台绘制进度条
     * @param progress 进度百分比（0-100）
     */
    public void drawProgressBar(long progress) {
        // 使用回车符实现原位刷新
        System.out.print("\r完成进度：[");

        // 定义进度条长度和已完成部分字符数
        int numChars = 50;  // 进度条总长度
        int numCompleted = (int)((double)progress * ((double)numChars / 100.0));  // 已完成部分长度

        // 绘制进度条
        for (int i = 0; i < numChars; ++i) {
            if (i < numCompleted) {
                System.out.print("=");  // 已完成部分用等号表示
            } else {
                System.out.print(" ");  // 未完成部分用空格表示
            }
        }

        // 显示进度百分比
        System.out.print("] " + progress + "%");
    }

}
